package cn.zkcn.platform.common.utils;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

@ConfigurationProperties(prefix = "platform.jwt")
@Component
public class JwtUtils {
	 private Logger logger = LoggerFactory.getLogger(getClass());

	    private String secret;
	    private long expire;
	    private String header;
	    
	    /**
	     * 生成jwt token
	     */
	    public String generateToken(long userId) {
	        Date nowDate = new Date();
	        //过期时间
	        Date expireDate = new Date(nowDate.getTime() + expire * 1000);

	        return Jwts.builder()
	                .setHeaderParam("typ", "JWT")
	                .setSubject(userId+"")
	                .setIssuedAt(nowDate)
	                .setExpiration(expireDate)
	                .signWith(SignatureAlgorithm.HS512, secret)
	                .compact();
	    }

	    public Claims getClaimByToken(String token) {
	        try {
	            return Jwts.parser()
	                    .setSigningKey(secret)
	                    .parseClaimsJws(token)
	                    .getBody();
	        }catch (Exception e){
	            logger.debug("validate is token error ", e);
	            return null;
	        }
	    }

	    /**
	     * token是否过期
	     * @return  true：过期
	     */
	    public boolean isTokenExpired(Date expiration) {
	        return expiration.before(new Date());
	    }

	    public String getSecret() {
	        return secret;
	    }

	    public void setSecret(String secret) {
	        this.secret = secret;
	    }

	    public long getExpire() {
	        return expire;
	    }

	    public void setExpire(long expire) {
	        this.expire = expire;
	    }

	    public String getHeader() {
	        return header;
	    }

	    public void setHeader(String header) {
	        this.header = header;
	    }
}
